home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / MiscKit1.7.1 / MiscKit / Examples / image2m / image2m.m < prev    next >
Encoding:
Text File  |  1995-12-04  |  2.5 KB  |  125 lines

  1. #import <appkit/appkit.h>
  2.  
  3. BOOL
  4. transcribeImageFromFileToCFile(char vname[], char in[], char out[])
  5. {
  6.   BOOL                ret = NO;
  7.  
  8.   FILE               *f;
  9.  
  10.   if ((f = fopen(in, "r")) != NULL)
  11.   {
  12.     unsigned char       i;
  13.  
  14.     int                 count = 0;
  15.     NXStream           *s = NULL;
  16.  
  17.     s = NXOpenMemory(NULL, 0L, NX_WRITEONLY);
  18.  
  19.     NXPrintf(s, "static unsigned char %s_buf[] = {\n", vname);
  20.     while (fread(&i, sizeof(unsigned char), (size_t)1, f) == 1)
  21.     {
  22.       int                 o = (int)i;
  23.  
  24.       NXPrintf(s, "0x%02hx, ", o);
  25.       
  26.       count += 1;
  27.       if ((count % 10) == 0)
  28.       {
  29.         NXPrintf(s, "\n");
  30.       }
  31.     }
  32.  
  33.     NXPrintf(s, "\n};\n\n");
  34.     NXPrintf(s, "NXImage *\n%s_fn(void)\n", vname);
  35.     NXPrintf(s, "{\n");
  36.     NXPrintf(s, "  NXImage *ret = nil;\n");
  37.     NXPrintf(s, "  NXStream *stream = NXOpenMemory(%s_buf, sizeof(%s_buf), NX_READONLY);\n", vname, vname);
  38.     NXPrintf(s, "  ret = [[NXImage alloc] initFromStream:stream];\n");
  39.     NXPrintf(s, "  NXCloseMemory(stream, NX_FREEBUFFER);\n");
  40.     NXPrintf(s, "  return ret;\n");
  41.     NXPrintf(s, "}\n\n");
  42.     
  43.     if (NXSaveToFile(s, out) == 0)
  44.     {
  45.       ret = YES;
  46.     }
  47.     NXCloseMemory(s, NX_FREEBUFFER);
  48.   }
  49.   return ret;
  50. }
  51.  
  52. int
  53. main(int argc, char *argv[])
  54. {
  55.   BOOL                verbose = YES;
  56.  
  57.   if (argc < 2)
  58.   {
  59.     fprintf(stderr, "Usage: %s [-h] [-s] filename {filename ...}\n", argv[0]);
  60.     exit(1);
  61.   } else
  62.   {
  63.     int                 i;
  64.  
  65.     for (i = 1; i < argc; i++)
  66.     {
  67.       if (strcmp(argv[i], "-h") == 0)
  68.       {
  69.         fprintf(stderr, "Usage: %s [-h] [-s] filename {filename ...}\n", argv[0]);
  70.         fprintf(stderr, "-h\tprint this message\n");
  71.         fprintf(stderr, "-s\tdo not print out progress verbosely\n");
  72.       } else
  73.       if (strcmp(argv[i], "-v") == 0)
  74.       {
  75.         verbose = NO;
  76.       } else
  77.       {
  78.         BOOL                err;
  79.         char               *dot;
  80.  
  81.         char                 vname[MAXPATHLEN + 1];
  82.         char                pathname[MAXPATHLEN + 1];
  83.  
  84.         strcpy(vname, argv[i]);
  85.  
  86.         if ((dot = strrchr(vname, '.')) != NULL)
  87.         {
  88.           if (strcmp(dot, ".tiff") != 0 &&
  89.               strcmp(dot, ".TIFF") != 0 &&
  90.               strcmp(dot, ".eps") != 0 &&
  91.               strcmp(dot, ".EPS") != 0)
  92.  
  93.           {
  94.             if (verbose)
  95.             {
  96.               fprintf(stderr, "error: %s not a TIFF or EPS file.\n", argv[i]);
  97.             }
  98.             continue;
  99.           }
  100.         }
  101.  
  102.         while ((dot = strchr(vname, '.')) != NULL)
  103.         {
  104.           *dot = '_';
  105.         }
  106.         strcpy(pathname, vname);
  107.         strcat(pathname, ".m");
  108.  
  109.         if (verbose)
  110.         {
  111.           fprintf(stderr, "working: %s --> ", argv[i]);
  112.         }
  113.  
  114.         err = transcribeImageFromFileToCFile(vname, argv[i], pathname);
  115.  
  116.         if (verbose)
  117.         {
  118.           fprintf(stderr, "%s (%s).\n", pathname, (err) ? "OK" : "ERROR");
  119.         }
  120.       }
  121.     }
  122.   }
  123.   return 0;
  124. }
  125.